import 'package:flutter/material.dart';
import 'package:ideology/shared/widgets/file_explorer/file_explorer_theme_data.dart';

import 'file_explorer.dart';
import 'file_node.dart';

/// 示例入口：运行最小可用的文件资源管理器 Demo。
void main() {
  runApp(const MyApp());
}

/// 顶层应用组件
///
/// - 关闭 debug banner；
/// - 将首页设为 [DemoPage]。
class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: const DemoPage(),
    );
  }
}

/// Demo 页面：
///
/// 左侧放置一个固定宽度的文件浏览器区域，
/// 使用静态 children 与懒加载混合的方式构建示例树。
class DemoPage extends StatelessWidget {
  const DemoPage({super.key});

  @override
  Widget build(BuildContext context) {
    // —— 示例根节点 —— //
    // 1) `src` 为“静态子节点”示例；
    // 2) `assets` 为“懒加载子节点”示例（首次展开时等待 900ms）。
    final roots = <FileNode>[
      const FileNode(
        'src',
        isFolder: true,
        children: [
          FileNode('main.dart'),
          FileNode(
            'utils',
            isFolder: true,
            children: [
              FileNode('helpers.dart'),
            ],
          ),
        ],
      ),
      FileNode(
        'assets',
        isFolder: true,
        loader: () async {
          // —— 模拟懒加载（真实项目中可在此读取文件系统或发起网络请求）——
          await Future.delayed(const Duration(milliseconds: 900));
          return const [
            FileNode('logo.png'),
            FileNode('banner.jpg'),
            FileNode('icons', isFolder: true, children: [
              FileNode('menu.png'),
              FileNode('back.png'),
            ]),
          ];
        },
      ),
    ];

    return Scaffold(
      body: Row(
        children: [
          // 左侧文件浏览器区域：可根据需要放在 Sidebar、Drawer 或 SplitView 中
          SizedBox(
            width: 300,
            child: FileExplorer(
              roots: roots,

              // 是否在初始化时展开根目录（这里只演示关闭）
              initiallyExpandedRoots: false,

              // 选中回调：业务层可在此联动编辑器、预览器等
              onNodeSelect: (path, node) {
                debugPrint('选中: $path (isFolder=${node.isFolder})');
              },

              // 可自定义文件颜色：根据扩展名返回不同颜色
              fileColorResolver: (name) {
                final lower = name.toLowerCase();
                if (lower.endsWith('.dart')) return Colors.blueAccent;
                if (lower.endsWith('.png') || lower.endsWith('.jpg')) {
                  return Colors.green;
                }
                if (lower.endsWith('.json') ||
                    lower.endsWith('.yaml') ||
                    lower.endsWith('.yml')) {
                  return Colors.orange;
                }
                if (lower.endsWith('.md')) return Colors.teal;
                // 其余使用默认灰色
                return const Color(0xFF757575);
              },

              // 主题可细调：以下为一组常见的默认视觉
              theme: const FileExplorerThemeData(
                backgroundColor: Colors.white,
                headerBackgroundColor: Color(0xFFF5F5F5),
                headerDividerColor: Color(0xFFE0E0E0),
                hoverColor: Color(0xFFEAF2FF),
                selectionColor: Color(0xFFCCE5FF),
                textColor: Colors.black87,
                secondaryTextColor: Colors.black54,
                folderColor: Color(0xFFFFB74D),
                fileColorDefault: Color(0xFF757575),
                rowHeight: 26,
                animationDuration: Duration(milliseconds: 180),
              ),

            ),
          ),
        ],
      ),
    );
  }
}
